// Copyright Rivtower Technologies LLC.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use std::fmt;

#[derive(Debug, PartialEq)]
pub enum Error {
    InvalidNonce,
    Dup,
    InvalidUntilBlock,
    BadSig,
    NotReady,
    Busy,
    BadChainId,
    // TODO: rename to QuotaOverflow
    QuotaNotEnough,
    Forbidden,
    InvalidValue,
    InvalidVersion,
}

impl fmt::Display for Error {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        use self::Error::*;
        match *self {
            InvalidNonce => write!(f, "InvalidNonce"),
            Dup => write!(f, "Dup"),
            InvalidUntilBlock => write!(f, "InvalidUntilBlock"),
            BadSig => write!(f, "BadSig"),
            NotReady => write!(f, "NotReady"),
            Busy => write!(f, "Busy"),
            BadChainId => write!(f, "BadChainId"),
            QuotaNotEnough => write!(f, "QuotaNotEnough"),
            Forbidden => write!(f, "Forbidden"),
            InvalidValue => write!(f, "InvalidValue"),
            InvalidVersion => write!(f, "InvalidVersion"),
        }
    }
}
